#ifndef __WEBPAGE_HPP__
#define __WEBPAGE_HPP__

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <fstream>
#include "../cppjieba/Jieba.hpp"
// #include "WebPage.hpp"
// #include "Configuration.hpp"
// #include "../../include/offline/WordSegmentation.hpp"

class WebPage {
    friend bool operator==(const WebPage& lhs, const WebPage& rhs); // 判断两篇文档是否相等
    friend bool operator< (const WebPage& lhs, const WebPage& rhs); // 对文档按docId进行排序

public:
    WebPage(){}
    // WebPage(std::string& doc); // 构造函数
    WebPage(std::string& doc, cppjieba::Jieba& jieba);
    int getDocId(); // 获取文档的docId
    std::string getTitle(); // 获取文档的标题
    std::string getUrl();
    std::string summary(const std::vector<std::string>& queryWords);
    std::map<std::string, int>& getWordsMap(); // 获取文档的词频统计map

private:
    const static int TOPK_NUMBER = 20;
    int _docId;                             // 文档id
    std::string _docTitle;                  // 文档标题
    std::string _docUrl;                    // 文档URL
    std::string _docContent;                // 文档内容
    std::string _docSummary;                // 文档摘要，需自动生成，不是固定的
    std::vector<std::string> _topWords;     // 词频最高的前20个词
    // std::vector<std::string> _wordsVec;     // 保存文档的分词结果
    std::map<std::string, int> _wordsMap;   // 保存每篇文档的所有词语和词频，不包括停用词

    //void processDoc(const std::string& doc, Configuration& config, WordSegmentation& jieba); // 对格式化文档进行处理
    void processDoc(const std::string& doc);
    void processWordsMap(cppjieba::Jieba& jieba);
    void calcTopK(int k = 20); // 求取文档的topk词集
    // void calcTopK(int k);
};
#endif